package com.pe.regope.integracion.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.pe.regope.integracion.dao.PerfilDAO;
import com.pe.regope.negocio.dto.PerfilDTO;

@Repository
public class PerfilDAOImpl extends SqlMapClientDaoSupport implements PerfilDAO{
	
	@Autowired
	public PerfilDAOImpl(SqlMapClient sqlMapClient){
		super.setSqlMapClient(sqlMapClient);
	}
	
	@Override
	public PerfilDTO obtenerPerfilUsuarioXSesion(String nombreUsuario, String contraseniaUsuario, Integer idPerfil) throws DataAccessException{
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("nombreUsuario", nombreUsuario);
		map.put("contraseniaUsuario", contraseniaUsuario);
		map.put("idPerfil", idPerfil);
		PerfilDTO usuario = (PerfilDTO)getSqlMapClientTemplate().queryForObject("Perfil.obtenerPerfilUsuarioXSesion", map);
		return usuario;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<PerfilDTO> obtenerPerfilesUsuarioXSesion(String nombreUsuario, String contraseniaUsuario) throws DataAccessException{
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("nombreUsuario", nombreUsuario);
		map.put("contraseniaUsuario", contraseniaUsuario);
		List<PerfilDTO> usuario = (List<PerfilDTO>)getSqlMapClientTemplate().queryForList("Perfil.obtenerPerfilesUsuarioXSesion", map);
		return usuario;
	}
	
	@Override
	public void insertarPerfilUsuario(Integer idUsuario, Integer idPerfil) {
		Map<String,Integer> map=new HashMap<String,Integer>();
		map.put("idUsuario",idUsuario);
		map.put("idPerfil", idPerfil);
		getSqlMapClientTemplate().insert("Perfil.insertarPerfilUsuario", map);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<PerfilDTO> obtenerPerfilesUsuario(Integer idUsuario){
		List<PerfilDTO> perfiles;
		perfiles=(List<PerfilDTO>)getSqlMapClientTemplate().queryForList("Perfil.obtenerPerfilesUsuario",idUsuario);
		return perfiles;
	}
	
	@Override
	public void actualizarEstadoPerfilUsuario(Integer idUsuario, Integer idPerfil,Boolean estadoPerfilUsuario) {
		Map <String,Object>  map=new HashMap<String,Object> ();
		map.put("idUsuario",idUsuario);
		map.put("idPerfil", idPerfil);
		map.put("estadoPerfilUsuario", estadoPerfilUsuario);
		getSqlMapClientTemplate().update("Perfil.actualizarEstadoPerfilUsuario", map);
	}
	
	@Override
	public void eliminarPerfilUsuario(Integer idUsuario, Integer idPerfil) {
		Map <String,Object>  map=new HashMap<String,Object> ();
		map.put("idUsuario",idUsuario);
		map.put("idPerfil", idPerfil);
		getSqlMapClientTemplate().delete("Perfil.eliminarPerfilUsuario", map);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<PerfilDTO> obtenerPerfilesTodos(){
		List<PerfilDTO> perfiles;
		perfiles=(List<PerfilDTO>)getSqlMapClientTemplate().queryForList("Perfil.obtenerPerfilesTodos");
		return perfiles;
	}
	
	public PerfilDTO obtenerUsuarioPerfil(Integer idUsuario, Integer idPerfil){
		Map <String,Object>  map=new HashMap<String,Object> ();
		PerfilDTO perfil;
		map.put("idUsuario",idUsuario);
		map.put("idPerfil", idPerfil);
		perfil=(PerfilDTO)getSqlMapClientTemplate().queryForObject("Perfil.obtenerUsuarioPerfil",map);
		return perfil;
	}
}
